From 018388d32116b2600ecdf9a7bd5cbbb6873b8818 Mon Sep 17 00:00:00 2001 From: Emmanuele Bassi Date: Mon, 8 Nov 2021 10:14:48 +0000 Subject: [PATCH] Unrealize ATContext on unroot Non-root widgets should unrealize their ATContext, if they have one, when they are unrooted, as they don't have a connection to a top level any more. Fixes: #4421 --- gtk/gtkwidget.c | 15 +++++++++++++++ 1 file changed, 15 insertions(+) diff --git a/gtk/gtkwidget.c b/gtk/gtkwidget.c index 907e2004f2..b0921818a8 100644 --- a/gtk/gtkwidget.c +++ b/gtk/gtkwidget.c @@ -2441,6 +2441,18 @@ gtk_widget_root_at_context (GtkWidget *self) gtk_at_context_set_display (priv->at_context, gtk_root_get_display (priv->root)); } +static void +gtk_widget_unroot_at_context (GtkWidget *self) +{ + GtkWidgetPrivate *priv = gtk_widget_get_instance_private (self); + + if (priv->at_context != NULL) + { + gtk_at_context_set_display (priv->at_context, gdk_display_get_default ()); + gtk_at_context_unrealize (priv->at_context); + } +} + void gtk_widget_realize_at_context (GtkWidget *self) { @@ -2532,6 +2544,9 @@ gtk_widget_unroot (GtkWidget *widget) if (!GTK_IS_ROOT (widget)) { + /* Roots unrealize the ATContext on unmap */ + gtk_widget_unroot_at_context (widget); + priv->root = NULL; g_object_notify_by_pspec (G_OBJECT (widget), widget_props[PROP_ROOT]); } -- 2.30.2